Tổng quan MQTT

Giao thức MQTT xác định hai dạng thực thể trong mạng: một message broker và những client. Một MQTT broker là một máy chủ (server) nhận tất cả các tin nhắn (message) từ các client và sau đó định tuyến (route) các tin nhắn này đến các client phù hợp.[18] Một MQTT client là bất kỳ thiết bị nào (từ vi điều khiển đến một máy chủ chính thức) chạy thư viện MQTT và kết nối tới MQTT broker qua mạng.[19]

MQTT quản lý các thông tin - dữ liệu mà nó nhận được theo hệ thống cấp bậc của các topic (tạm dịch: chủ đề). Với cơ chế publish-subscribe của MQTT, khi một publisher có một dữ liệu muốn truyền đi, nó sẽ gởi một tin nhắn điều khiển (control message) với dữ liệu muốn truyền đi đó đến MQTT broker mà nó đã kết nối đến. Broker sau đó sẽ gởi các thông tin mà nó nhận được này đến client đã đăng ký (subscribe) vào topic đó. Các publisher không cần có bất cứ thông tin nào về số lượng hay vị trí của các subscriber, đồng thời, các subscriber cũng không cần phải được cấu hình để có bất kì thông tin gì về các publisher.

Nếu một broker nhận một tin nhắn trên một topic mà hiện tại không có subscriber, broker sẽ bỏ tin nhắn đó đi, trừ khi publisher của tin nhắn đó chỉ định tin nhắn đó là một retained message (tạm dịch: tin nhắn được giữ lại). Một retained message là một tin nhắn MQTT thông thường với cờ retained được gán giá trị true. Broker lưu retained message cuối cùng và QoS tương ứng cho topic được chọn. Mỗi client đăng ký (subscribe) vào một topic phù hợp với topic của retained message sẽ ngay lập tức nhận được retained message đó sau khi client đó đăng ký. Broker chỉ lưu một retained message cho từng topic.[20] Cơ chế này cho phép một subscriber mới của một topic có thể nhận được những thông tin mới nhất, hơn là phải chờ đợi lần cập nhật tiếp theo từ một publisher. Client chỉ tương tác với một broker, nhưng một hệ thống có thể chứa một số máy chủ làm broker với nhiệm vụ trao đổi dữ liệu dựa trên các topic hiện tại được các client đăng ký.

Một tin nhắn điều khiển tối thiểu của MQTT có thể có ít nhất là hai byte dữ liệu. Một tin nhắn điều khiển có thể mang gần 256 megabyte dữ liệu nếu cần thiết. Có 14 kiểu tin nhắn được định nghĩa để kết nối và ngắt kết nối một client khỏi broker, để xuất bản (publish) dữ liệu, xác nhận việc nhận dữ liệu đã nhận được và giám sát kết nối giữa client và server (máy chủ).

MQTT hoạt động ở tầng ứng dụng (Application layer), và dựa trên giao thức TCP (ở tầng giao vận, Transport layer) để truyền dữ liệu. Giao thức MQTT-SN, biến thể từ MQTT, sử dụng trên các phương thức tiện truyền tải khác như giao thức UDP hoặc Bluetooth.

MQTT gửi các thông tin đi dưới dạng văn bản thuần túy và không bao gồm bất kỳ biện pháp bảo mật hoặc xác thực nào. Việc bảo mật với MQTT có thể được thực hiện bởi TLS để mã hóa và bảo vệ thông tin được truyền khỏi việc bị đánh chặn, sửa đổi hoặc giả mạo.

Cổng MQTT không được mã hóa mặc định là 1883. Cổng được mã hóa là 8883.[21]